package object_Test;

import java.util.Arrays;


public class ComparableTest {

        public static void sort(Comparable[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                for (int j = 0; j < arr.length - i - 1; j++) {
//                if (arr[j] > arr[j + 1]) // swap
                    if (arr[j].compareTo(arr[j + 1]) > 0) {
                        // 前一个大于后一个，交换j和j + 1
                        Comparable temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
        }

    public static void main(String[] args) {

        //data 整形数组，创建了三个int变量，默认值为0
        int[] data = new int[]{
            8,1,6
        };
        Arrays.sort(data);
        System.out.println(Arrays.toString(data));
        // 是一个 Person类型的数组，前面保存的是
        //在栈区里面开辟空间堆区地址，后面 new Person【3】
        //相当于开辟了一个空间，里面有三个房间，每个房间可以保存
        //一个Person类型的地址。
        Person[] person = new Person[]{
                new Person("张三",18),
                new Person("李四",15),
                new Person("王五",16)
        };
        sort(person);
        System.out.println(Arrays.toString(person));
    }


}

class Person implements Comparable{

    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        if(this == o){
            return 0;//指向同一块地址，肯定相等。
        }

        if(o instanceof Person){
            // 说明当前传入的o就是Person类型的引用，向下转型还原为Person
            // 要比较Person对象的大小关系，就要用到Person独有的属性，向下转型
            Person per = (Person)o;
            // 如果此时就是根据年龄大小比较

            return per.age - this.age;
        }

        // 报错，抛出异常  （后面会讲）
        throw new IllegalArgumentException("不是Person类型，无法比较！");
    }

}
